package domain;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import database.*;

public class GestorProductos {

	public GestorProductos() {

	}

	public void nuevaPelicula(String titulo, String autor, int ano,
			int duracion, String descripcion, String formato,
			double precioAlquiler, double precioCompra, double valoracion,
			String estado, int numerV, double puuntuacionSuma) {
		DBGestor DBGestor = new DBGestor();

		int id = getMaxID() + 1;
		Pelicula pelicula = new Pelicula(titulo, autor, ano, duracion,
				descripcion, formato, precioAlquiler, precioCompra, valoracion,
				estado, id, numerV, puuntuacionSuma);
		DBGestor.guardarPelicula(pelicula);
		DBGestor = null;

	}

	public void nuevaPeliculaTrasEliminar(Integer key, String titulo,
			String autor, int ano, int duracion, String descripcion,
			String formato, double precioAlquiler, double precioCompra,
			double valoracion, String estado, int numerV, double puuntuacionSuma) {
		DBGestor DBGestor = new DBGestor();

		Pelicula pelicula = new Pelicula(titulo, autor, ano, duracion,
				descripcion, formato, precioAlquiler, precioCompra, valoracion,
				estado, key, numerV, puuntuacionSuma);
		DBGestor.guardarPelicula(pelicula);
		DBGestor = null;

	}

	public int getMaxID() {
		int maxID = -1;
		GestorProductos gestorProductos = new GestorProductos();
		Set<Pelicula> peliculas = new HashSet<Pelicula>();
		peliculas = gestorProductos.consultarPeliculas();

		if (peliculas != null) {
			Map<String, Pelicula> peliculasTodas = new HashMap<String, Pelicula>();
			for (Pelicula a : peliculas) {
				peliculasTodas.put(String.valueOf(a.getId_producto()), a);
			}
			ArrayList<Pelicula> listaPeliculas = new ArrayList<Pelicula>(
					peliculasTodas.values());
			for (int i = 0; i < listaPeliculas.size(); i++) {
				if (listaPeliculas.get(i).getId_producto() > maxID) {
					maxID = listaPeliculas.get(i).getId_producto();
				}
			}
		}
		return maxID;
	}

	public void nuevoCD(String titulo, String autor, int ano, int duracion,
			String descripcion, int numeroCanciones, double precioAlquiler,
			double precioCompra, double valoracion, String estado, int numeroV,
			double puntuacionSuma) {
		DBGestor DBGestor = new DBGestor();
		int id = getMaxIDCD() + 1;
		CD CD = new CD(titulo, autor, ano, duracion, descripcion,
				numeroCanciones, precioAlquiler, precioCompra, valoracion,
				estado, id, numeroV, puntuacionSuma);
		DBGestor.guardarCD(CD);
		DBGestor = null;
	}

	public void nuevaCDTrasEliminar(Integer key, String titulo, String autor,
			int ano, int duracion, String descripcion, int numCanciones,
			double precioAlquiler, double precioCompra, double valoracion,
			String estado, int numerV, double puntuacionSuma) {
		DBGestor DBGestor = new DBGestor();

		CD CD = new CD(titulo, autor, ano, duracion, descripcion, numCanciones,
				precioAlquiler, precioCompra, valoracion, estado, key, numerV,
				puntuacionSuma);
		DBGestor.guardarCD(CD);
		DBGestor = null;

	}

	private int getMaxIDCD() {
		int maxID = -1;
		GestorProductos gestorProductos = new GestorProductos();
		HashSet<CD> CDs = new HashSet<CD>();
		CDs = (HashSet<CD>) gestorProductos.consultarCDs();

		if (CDs != null) {
			Map<String, CD> CDsTodas = new HashMap<String, CD>();
			for (CD a : CDs) {
				CDsTodas.put(String.valueOf(a.getId_producto()), a);
			}
			ArrayList<CD> listaCDs = new ArrayList<CD>(CDsTodas.values());
			for (int i = 0; i < listaCDs.size(); i++) {
				if (listaCDs.get(i).getId_producto() > maxID) {
					maxID = listaCDs.get(i).getId_producto();
				}
			}
		}
		return maxID;
	}

	public Set<Pelicula> consultarPeliculas() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarPeliculas();
	}

	public ArrayList<Pelicula> consultarPeliculasOrdenadas() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarPeliculasOrdenadas();
	}

	public ArrayList<CD> consultarCDOrdenadas() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarCDOrdenadas();
	}

	public Set<CD> consultarCDs() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarCDs();
	}

	public void modificarPelicula(String key, Pelicula pelicula) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarPelicula(key, pelicula);
		DBGestor = null;

	}

	public void modificarCD(String key, CD CD) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarCD(key, CD);
		DBGestor = null;

	}

	public void eliminarCDs() {

		DBGestor DBGestor = new DBGestor();
		DBGestor.eliminarCD();
		DBGestor = null;

	}

	public void eliminarPeliculas() {
		DBGestor DBGestor = new DBGestor();
		DBGestor.eliminarPelicula();
		DBGestor = null;

	}

	public void ordenarPeli(ArrayList<Pelicula> listaA) {
		PeliculaCompare tCompare = new PeliculaCompare();
		Collections.sort(listaA, tCompare);
	}

	public void ordenarCD(ArrayList<CD> listaA) {
		CDCompare tCompare = new CDCompare();
		Collections.sort(listaA, tCompare);
	}

	class CDCompare implements Comparator<CD> {

		@Override
		public int compare(CD one, CD two) {
			// TODO Auto-generated method stub
			return String.valueOf(one.getPuntuacionSuma()).compareTo(
					String.valueOf(two.getPuntuacionSuma()));
		}

	}

	class PeliculaCompare implements Comparator<Pelicula> {

		@Override
		public int compare(Pelicula one, Pelicula two) {
			// TODO Auto-generated method stub
			return String.valueOf(one.getPuntuacion()).compareTo(
					String.valueOf(two.getPuntuacion()));
		}

	}

}
